import copy
import os
import argparse

import sys
# 获得当前项目的绝对路径
current_path = str(os.path.abspath(__file__)).replace("\\", "/")
current_path = current_path.split("/parking_detect")[0]
sys.path.append(current_path)
from parking_detect.externalCommImageHandle import Communication
from parking_detect.load_json import load_config, ParkingObject
from parking_detect.detect import DetectParking
from parking_detect.utils.show_parking_config import ShowConfig




def debug(parser):
    # 初始化停车场检测类
    parking_detect = DetectParking()

    # 获取结果
    res = parking_detect.detect()
    if parser.debug:
        # 将绝对路径和相对路径拼接为绝对路径
        src = current_path + parser.img.lstrip(current_path)
        config = current_path + parser.config.lstrip(current_path)

        show = ShowConfig(mask_path=src, config_path=config)
        show.show_config(results=res)


def run():
    """
    正常运行程序:
    1. 加载配置文件
    2. 加载模型
    3. todo 从外界定时取一帧图片
    3. 使用模型检测得到结果
    4. 处理结果, 当发生车位车辆变化向外界通讯
    """
    # 加载配置文件
    parking_list = load_config()
    # 加载模型
    model_detect = DetectParking()
    # 初始化外界通讯类
    comm = Communication()
    while True:
        # 使用模型检测得到结果
        res = model_detect.detect()
        # 遍历所有检测到的停车位， 判断这个车位是否停车
        tem = []
        for j in parking_list:
            for i in res:
                # 判断是否在一个停车位内
                if j.contact_ratio(*i[1:]):
                    # 是的话将停车位信息保存到tem中
                    tem.append(copy.deepcopy(j))

        # 将最新的停车位对象传过去, 处理结果并向外界通讯
        comm.parking_change(tem)


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--debug', type=bool, default=False)
    parser.add_argument('--img', type=str, default="img/demo.jpg")
    parser.add_argument('--config', type=str, default="parking_detect/parking.json")
    args = parser.parse_args()
    if args.debug:
        debug(args)
    else:
        run()


if __name__ == "__main__":
    main()
